package com.sk.rpcAssist.annotation.loadBalancer;

import com.sk.rpcAssist.domain.ServerInfo;

/**
 * description：负载均衡接口
 *1、轮询法：
 * 将请求按照顺序轮流地分配到后端服务器上，他均衡地对待后端的每一台服务器，而不关心服务器的实际连接数和当前的系统的负载；
 * 2、随机法：
 * 通过系统的随机算法，由概率论可知，随着后期的访问量增大，最终的负载数接近于轮询算法的结果
 * 3、源地址哈希法：
 * 方式：使用客户端IP地址，通过哈希函数计算得到的一个数值，用该数值对服务器列表的大小进行取模运算，得到客户端要访问的服务器的序列，
 * 好处：解决session跨域的问题，每个用户的请求映射到同一台服务器上；
 * 4、加权轮询法：
 * 方法：按照每台服务器的配置和负载来设置权重因子，这样可以更好的解决服务器处理能力差距而带来的负载的差距；也是按照顺序来请求服务器的，但是权重大的可以请求排在前面；
 * 5、加权随机法：
 * 和加权轮询法相比，都是按照后天服务器的处理能力，系统的负载分配不同的权重，不同的是，他是按照权重随机请求后端的服务器，而非顺序；
 * 6、最小连接数法
 * 最小连接数算法比较灵活和智能，由于后台服务器的配置不同，处理能力就不同，动态的选取其中当前连接数最少的一台服务器来处理请求，尽可能的提高后端服务的利用率；
 * @author 孙文斌
 * @Date: 2021/2/26 17:11
 */
public interface LoadBalancerRule {
    ServerInfo choose(ILoadBalancer lb, Object key);
}
